МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Інститут комп”ютерних технологій, автоматики та метрології
кафедра автоматики та телемеханіки
Курсова робота
з курсу: “ Методи та засоби криптографічних перетворень”
Львів – 2005
Зміст
Завдання
Шифрування афінним шифром
Теоретичні відомості про афінний шифр
Блок-схема алгоритму шифрування афінним шифром
Текст програми шифрування афінним шифром
Вхідний текст
Зашифрований текст
Шифрування RSA
Теоретичні відомості про шифр RSA
Теоретичне зашифрування тексту методом RSA
Висновки
Література
Завдання
1. Симетричне шифрування
Вибрати ключі та розробити програму для зашифрування файлу даних заданих афінним шифром. Тип афінного шифру визначається останьою цифрою НЗК. Об’єм алфавіту визначається передостанньою цифрою НЗК і дорівнює .
Варіант
2
Тип афінного шифру
Афінний першого порядку
Розрядність алфавіту
14
Об‘єм алфавіту
16384
2. Асиметричне шифрування
Зашифрувати Слово відкритого тексту за алгоритмом RSA. Слово визначається останньою буквою НЗК і задане в таблиці. Для генерування ключів використовувати числа р та , які визначаються передостанньою цифрою НЗК і задані в таблиці.
і
8
Слово
Н
И
З
9
11
13
Букви тексту замінити натуральними числами, що відповідають порядковому номеру букви в українському алфавіті. Наприклад А=00, Б=01, В=02 і т.д.
Теоретичні відомості
Афінні шифри- підклас шифрів заміни, що включає, як частковий випадок шифр Віжінера і навіть шифр перестановки з фіксованим періодом.
N-символьний алфавіт ототожнюємо з кільцем . А саме кожна буква замінюється своїм номером у алфавіті, причому нумерація починається з нуля. Наприклад, латинська абетка ототожнюється із , а українська із . Літера а української абетки трактується як нуль, літера б як 1, в як 2. Тепер до букв відкритого тексту ми можемо вільно застосовувати операцію додавання та множення за відповідним модулем.
Афінний шифр.
Ключі: a, такі, що , , .
Шифрування. У повідомлені кожна буква заміщується буквою .
Дешифрування. У криптотексті кожна буква заміщуються буквою ,де і .
Блок-схема алгоритму
Функція кодування encrypt
Текст програми за шифрування
#include <stdio.h>
#include <math.h>
#include <dos.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
/*============Constants================*/
const unsigned int m=5+9; //bits
const unsigned int n_buf=32; //bits
/*=============Types===================*/
/*===========Variables=================*/
unsigned long a, s, n;
/*======Function declaration===========*/
unsigned long max_value(int k);
unsigned long encrypt(unsigned long c);
void get_key(void);
/*==========MAIN FUNCTION==============*/
void main(void)
{
struct dostime_t tbegin, tend;
FILE *f, *fc;
int r_end=0, x_read=1;
unsigned long buf, buf_c = 0, x;
int lb=n_buf, lbc=n_buf;
get_key();
_dos_gettime(&tbegin);
n = max_value(m);
if ( (f=fopen("c:\\data.fb", "rb")) == NULL )
{
printf("cannot open the file data.fb");
getch();
exit(1);
}
else
if ( (fc=fopen("c:\\data.fbc", "wb")) == NULL )
{
printf("cannot open the file data.fbc");
getch();
exit(1);
}
else
{
if (fread(&buf, 1, n_buf/8, f) != 0)
while (!r_end)
{
if (lb<=0)
{
if (fread(&buf, 1, n_buf/8, f) != 0)
{
x |= (buf << (m+lb)) & max_value(m);
buf >>= (-lb);
lb += n_buf;
x_read = 1 & !(lb==n_buf);
}
else
{
r_end = 1;
x_read = 1;
}
}
else
{
x = buf & max_value(m);
buf >>= m;
lb -= m;
x_read = 1 & (lb>=0);
}
//----------------------------
if (x_read)
{
// printf("%0x --- %c\n", x, ( unsigned char)x);
// getch();
x = encrypt(x);
buf_c |= x << (n_buf-lbc);
lbc -= m;
if (lbc<=0)
{
fwrite(&buf_c, n_buf/8, 1, fc);
buf_c &= 0;
if (lbc==0)
lbc = ...